package br.edu.ufc.deti.broker.negocio.custo;

import java.util.Iterator;

import br.edu.ufc.deti.beans.PerfClusters;
import br.edu.ufc.deti.beans.Recurso;
import br.edu.ufc.deti.beans.Requisito;

public class NgcFuncaoCusto {
	
	public PerfClusters calculaCustoCluster( PerfClusters perfClusters ) {
		//Unidade De Tempo Criada: PCT ( PerfClustersTimer - Unidade de Tempo Perfclusters )
		//TODO: Fazer a converção no bean;
		String parcela_TempoEstExecApp_S = converteTempoEstExecApp2MoedaPerfClsuters();
		float parcela_TempoEstExecApp_F = new Float( parcela_TempoEstExecApp_S );
		// Calculando valor de desempenho dos recursos;
		for (Iterator<Recurso> i = perfClusters.getRecursos().iterator(); i.hasNext();) {
			Recurso recurso = (Recurso) i.next();
			double precoProcessamento = 0, precoMemoria = 0,precoQtdNos = 0, precoVazaoExterna = 0;
			for (Iterator<Requisito> j = perfClusters.getRequisitos().iterator(); j.hasNext();) {
				Requisito requisito = (Requisito) j.next();
				float valorMinimoRequisito = requisito.getValorMinimoRequisito();
				//TODO: Ver como utilizar a intensidade de utilizacao do requisito na funcao custo;
				float usoRequisito = requisito.getUsoRequisito();

		    	if(requisito.getDscRequisito().equalsIgnoreCase("processamento")){
			    	// preçoPCProcessamento --> preço para o uso do processador: PCT/MHz
			    	float precoPCProcessamento = recurso.getPrecoProcessador();
			    	precoProcessamento = valorMinimoRequisito * precoPCProcessamento; 
				}else if(requisito.getDscRequisito().equalsIgnoreCase("memoria")){
			    	float precoPCMemoria = recurso.getPrecoMemoria();
			    	precoMemoria = valorMinimoRequisito * precoPCMemoria; 
				}else if(requisito.getDscRequisito().equalsIgnoreCase("rede_interna")){
			    	float precoPCRedeInterna = recurso.getPrecoRedeInterna();
			    	precoQtdNos = valorMinimoRequisito * precoPCRedeInterna; 
				}else if(requisito.getDscRequisito().equalsIgnoreCase("rede_externa")){
			    	float precoPCPrecoRedeExterna = recurso.getPrecoRedeExterna();
			    	precoVazaoExterna = valorMinimoRequisito * precoPCPrecoRedeExterna; 
				}
			}
			recurso.setPrecoRecurso( precoProcessamento + precoQtdNos + precoMemoria + precoVazaoExterna );
		}	
		return perfClusters;
	}
	private String converteTempoEstExecApp2MoedaPerfClsuters() {
		return null;
	}
	public static void main(String[] args) {
		
	}
}
